import axios, {
  type AxiosInstance,
  type AxiosRequestConfig,
  type AxiosResponse,
  type InternalAxiosRequestConfig,
} from 'axios'

// 创建axios实例--- 基础配置
let service: AxiosInstance = axios.create({
  baseURL: 'http://geek.itheima.net',
  timeout: 3000,
})

// 请求拦截器
service.interceptors.request.use((conf: InternalAxiosRequestConfig) => {
  // 一般会操作：设置头部
  conf.headers['Content-Type'] = 'application/x-www-form-urlencoded'
  // conf.headers["token"]
  return conf
})

// 响应拦截去
service.interceptors.response.use((conf: AxiosResponse) => {
  return conf.data
})

// 返回值 公用 接口类型
export interface ApiResponse<T> {
  code: number
  message: string
  response: T
}

// 程序并不能知道 .then 的返回值  conf.data
// 告诉程序，.then 返回值 修改了

export default <T>(config: AxiosRequestConfig): Promise<ApiResponse<T>> => {
  return service(config)
}
